class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int len = nums.size();
        if (len == 0)
            return 0;

        int ret = 1;
        unordered_set<int> hash;
        for (auto i : nums)
            hash.insert(i);

        for (auto e : hash)
        {
            //精髓，如果要查找的数的前面一个数存在，那么由这个数开头的连续序列一定不是最长的
            //例如要查找的是数字4，但是存在数字3，那么由数字3开头的连续序列长度一定长于由4开头的
            if (hash.find(e - 1) != hash.end())
                continue;

            int tmp_len = 1;
            int next = e + 1;
            while (hash.count(next++))
                tmp_len++;

            ret = max(ret, tmp_len);
        }

        return ret;
    }
};